Page({
  data: {
    phone: '',
    password: '',
    code: '', // 短信验证码
    captchaCode: '', // 图形验证码输入
    loginType: 'password', // password 或 code
    isAgreed: false,
    canLogin: false,
    canSendCode: false,
    codeText: '获取验证码',
    countdown: 0,
    loginText: '登录',
    uuid: '', // 图形验证码标识
    captchaImg: '', // 图形验证码图片（Base64格式）
    captchaTimer: null // 验证码超时定时器
  },

  onLoad() {
    this.checkLoginStatus();
    // 初始化加载图形验证码
    this.getCaptcha();
  },

  onUnload() {
    // 页面卸载时清除定时器
    if (this.data.captchaTimer) {
      clearTimeout(this.data.captchaTimer);
    }
  },

  // 检查登录状态
  checkLoginStatus() {
    const token = wx.getStorageSync('token');
    if (token) {
      wx.switchTab({ url: '/pages/index/index' });
    }
  },

  // 获取图形验证码（处理Base64格式）
  getCaptcha() {
    // 清除之前的超时定时器
    if (this.data.captchaTimer) {
      clearTimeout(this.data.captchaTimer);
    }

    wx.showLoading({ title: '加载验证码...' });
    wx.request({
      url: 'http://localhost/dev-api/captchaImage',
      method: 'GET',
      success: (res) => {
        wx.hideLoading();
        console.log('图形验证码接口返回:', res.data);
        
        if (res.data.code === 200 && res.data.uuid && res.data.img) {
          // 为Base64图片添加格式前缀
          const base64Img = `data:image/jpeg;base64,${res.data.img}`;
          this.setData({
            uuid: res.data.uuid,
            captchaImg: base64Img,
            captchaCode: '' // 刷新验证码时清空输入
          });

          // 设置5分钟后自动刷新验证码（避免超时）
          const timer = setTimeout(() => {
            this.getCaptcha();
          }, 5 * 60 * 1000); // 5分钟有效期
          this.setData({ captchaTimer: timer });
        } else {
         // wx.showToast({ title: '验证码加载失败', icon: 'none' });
        }
      },
      fail: () => {
        wx.hideLoading();
        wx.showToast({ title: '网络错误', icon: 'none' });
      }
    });
  },

  // 手机号输入
  onPhoneInput(e) {
    const phone = e.detail.value;
    this.setData({
      phone: phone,
      canSendCode: this.validatePhone(phone)
    });
    this.checkCanLogin();
  },

  // 密码输入
  onPasswordInput(e) {
    const password = e.detail.value;
    this.setData({ password });
    this.checkCanLogin();
  },

  // 短信验证码输入
  onCodeInput(e) {
    const code = e.detail.value;
    this.setData({ code });
    this.checkCanLogin();
  },

  // 图形验证码输入
  onCaptchaInput(e) {
    const captchaCode = e.detail.value;
    this.setData({ captchaCode });
    this.checkCanLogin();
  },

  // 切换登录方式
  onSwitchLoginType(e) {
    const type = e.currentTarget.dataset.type;
    this.setData({
      loginType: type,
      password: '',
      code: '',
      captchaCode: ''
    });
    // 切换时刷新图形验证码
    this.getCaptcha();
    this.checkCanLogin();
  },

  // 发送短信验证码
  onSendCode() {
    if (!this.data.canSendCode || this.data.countdown > 0) return;

    const phone = this.data.phone;
    // if (!this.validatePhone(phone)) {
    //   wx.showToast({ title: '请输入正确的手机号', icon: 'none' });
    //   return;
    // }

    if (!this.data.captchaCode.trim()) {
      wx.showToast({ title: '请输入图形验证码', icon: 'none' });
      return;
    }

    wx.showLoading({ title: '发送中...' });

    // 调用后端短信接口（携带图形验证码）
    const params = {
      phone,
      captchaCode: this.data.captchaCode,
      uuid: this.data.uuid
    };
    console.log('发送短信验证码参数:', params);

    wx.request({
      url: 'http://localhost/dev-api/sms/sendCode',
      method: 'POST',
      data: params,
      success: (res) => {
        wx.hideLoading();
        if (res.data.code === 200) {
          wx.showToast({ title: '验证码已发送', icon: 'success' });
          this.startCountdown();
          // 发送成功后刷新图形验证码（这里可以刷新，因为短信验证和图形验证是两次独立校验）
          this.getCaptcha();
        } else {
          wx.showToast({ title: res.data.msg || '发送失败', icon: 'none' });
          // 失败时延迟刷新验证码
          if (res.data.msg && res.data.msg.includes('验证码')) {
            setTimeout(() => {
              this.getCaptcha();
            }, 1000);
          }
        }
      },
      fail: () => {
        wx.hideLoading();
        wx.showToast({ title: '网络错误', icon: 'none' });
      }
    });
  },

  // 验证码倒计时
  startCountdown() {
    let countdown = 60;
    this.setData({
      countdown,
      codeText: `${countdown}s`,
      canSendCode: false
    });

    const timer = setInterval(() => {
      countdown--;
      this.setData({
        countdown,
        codeText: countdown > 0 ? `${countdown}s` : '获取验证码'
      });

      if (countdown <= 0) {
        clearInterval(timer);
        this.setData({ canSendCode: this.validatePhone(this.data.phone) });
      }
    }, 1000);
  },

  // 登录核心逻辑
  onLogin() {
    // if (!this.data.canLogin) return;
    if (!this.data.isAgreed) {
      wx.showToast({ title: '请同意用户协议', icon: 'none' });
      return;
    }

    this.setData({ loginText: '登录中...' });

    // 构造登录参数（确保code字段始终存在）
    const loginParams = {
      username: this.data.phone,
      captchaCode: this.data.captchaCode,
      uuid: this.data.uuid,
      code: '' // 密码登录时传递空字符串，避免后端null错误
    };

    // 根据登录方式添加参数
    if (this.data.loginType === 'password') {
      loginParams.password = this.data.password;
    } else {
      loginParams.code = this.data.code; // 验证码登录时传递短信验证码
    }

    console.log('登录参数:', loginParams); // 打印参数供调试

    // 调用后端登录接口
    wx.request({
      url: 'http://localhost/dev-api/login',
      method: 'POST',
      header: { 'Content-Type': 'application/json' },
      data: loginParams,
      success: (res) => {
        this.setData({ loginText: '登录' });
        console.log('登录响应:', res.data);

        if (res.data.code === 200 && res.data.token) {
          // 登录成功逻辑
          wx.setStorageSync('token', res.data.token);
          this.getUserInfo(res.data.token);
        } else {
          wx.showToast({ title: res.data.msg || '登录失败', icon: 'none' });
          // 仅当明确是验证码错误时，延迟1秒刷新（关键修复：避免过早刷新）
          if (res.data.msg && res.data.msg.includes('验证码')) {
            setTimeout(() => {
              this.getCaptcha();
            }, 1000);
          }
        }
      },
      fail: (err) => {
        this.setData({ loginText: '登录' });
        console.error('登录失败：', err);
        wx.showToast({ title: '网络错误', icon: 'none' });
      }
    });
  },

  // 获取用户信息
  getUserInfo(token) {
    wx.request({
      url: 'http://localhost/dev-api/getInfo',
      method: 'GET',
      header: { 'Authorization': `Bearer ${token}` },
      success: (res) => {
        if (res.data.code === 200 && res.data.user) {
          const user = res.data.user;
          const userInfo = {
            id: user.userId,
            name: user.nickName || user.userName,
            avatar: user.avatar || '/images/default-avatar.png',
            phone: user.phonenumber,
            gender: user.sex === 1 ? '男' : (user.sex === 2 ? '女' : '未知'),
            joinYear: user.createTime ? user.createTime.split('-')[0] : '',
            points: user.totalPoint || 0,
            following: user.following || 0,
            followers: user.followers || 0,
            isVip: user.isVip === 1,
            vipExpireDate: user.vipExpireTime ? new Date(user.vipExpireTime).toLocaleDateString() : ''
          };

          // 保存用户信息
          const app = getApp();
          app.setUserInfo(userInfo);
          wx.setStorageSync('userInfo', userInfo);

          wx.showToast({ title: '登录成功', icon: 'success' });
          setTimeout(() => {
            wx.switchTab({ url: '/pages/index/index' });
          }, 1500);
        } else {
          wx.showToast({ title: '获取用户信息失败', icon: 'none' });
        }
      },
      fail: () => {
        wx.showToast({ title: '获取用户信息失败', icon: 'none' });
      }
    });
  },

  // 微信登录
  onWechatLogin() {
    if (!this.data.captchaCode) {
      wx.showToast({ title: '请输入图形验证码', icon: 'none' });
      return;
    }

    wx.showLoading({ title: '登录中...' });

    wx.login({
      success: (loginRes) => {
        const params = {
          code: loginRes.code,
          captchaCode: this.data.captchaCode,
          uuid: this.data.uuid
        };
        console.log('微信登录参数:', params);

        wx.request({
          url: 'http://localhost/dev-api/login/wechat',
          method: 'POST',
          data: params,
          success: (res) => {
            wx.hideLoading();
            if (res.data.code === 200 && res.data.token) {
              wx.setStorageSync('token', res.data.token);
              this.getUserInfo(res.data.token);
            } else {
              wx.showToast({ title: res.data.msg || '微信登录失败', icon: 'none' });
              // 验证码错误时延迟刷新
              if (res.data.msg && res.data.msg.includes('验证码')) {
                setTimeout(() => {
                  this.getCaptcha();
                }, 1000);
              }
            }
          },
          fail: () => {
            wx.hideLoading();
            wx.showToast({ title: '网络错误', icon: 'none' });
          }
        });
      }
    });
  },

  // 其他登录方式（占位）
  onQQLogin() {
    wx.showToast({ title: 'QQ登录功能开发中', icon: 'none' });
  },
  onWeiboLogin() {
    wx.showToast({ title: '微博登录功能开发中', icon: 'none' });
  },

  // 协议相关
  onToggleAgreement() {
    this.setData({ isAgreed: !this.data.isAgreed });
  },
  onUserAgreement() {
    wx.navigateTo({ url: '/pages/user-agreement/user-agreement' });
  },
  onPrivacyPolicy() {
    wx.navigateTo({ url: '/pages/privacy-policy/privacy-policy' });
  },

  // 去注册页
  onGoRegister() {
    wx.navigateTo({ url: '/pages/register/register' });
  },

  // 手机号验证
  validatePhone(phone) {
    return /^1[3-9]\d{9}$/.test(phone);
  },

  // 检查登录按钮状态（含图形验证码校验）
  checkCanLogin() {
    const { phone, password, code, loginType, captchaCode } = this.data;
    let canLogin = true;

    // 必须满足：手机号有效 + 图形验证码非空
    if (this.validatePhone(phone) && captchaCode.trim().length > 0) {
      if (loginType === 'password') {
        // 密码登录：额外需要密码≥6位
        canLogin = password.length >= 6;
      } else {
        // 验证码登录：额外需要短信验证码=6位
        canLogin = code.length === 6;
      }
    }

    this.setData({ canLogin });
    console.log('当前canLogin状态:', canLogin);
  }
});
